#include <stdio.h>
#include <unistd.h>
#include <stdlib.h>
#include <sys/time.h>
#include <sys/types.h>
#include <signal.h>

void Sig_Handler(int num) {
    printf("Sig num = %d\n", num);
}

int main()
{
    signal(SIGINT, Sig_Handler);
    signal(SIGQUIT, Sig_Handler);

    sigset_t pend, mask, oldmask;

    // 初始化信号集
    sigemptyset(&pend);
    sigemptyset(&mask);
    sigemptyset(&oldmask);

    // 加入信号集
    sigaddset(&mask, SIGINT);
    sigaddset(&mask, SIGQUIT);
    
    // 把指定信号集，加入到阻塞信号集中
    sigprocmask(SIG_BLOCK, &mask, &oldmask);
    
    int j = 1;
    while(1) {
        // 获得未决信号集
        sigpending(&pend);

        for(int i = 1; i < 32; i++) {
            // 判断某个信号是否在未决信号集中
            if(sigismember(&pend, i) == 1) {
                printf("1");
            } else {
                printf("0");
            }
        }
        printf("\n");
        
        if(j++ % 3 == 0) {
            // sigprocmask(SIG_SETMASK, &oldmask, NULL);
            sigprocmask(SIG_UNBLOCK, &mask, NULL);
            
        } else {
            sigprocmask(SIG_BLOCK, &mask, NULL);
        }
        sleep(1);
    }

    return 0;
}

